--------------------review-----------------------------

数据类型
    typeof undefined
            object 
            number
            string
            boolean
5种基本数据
    undefined
        1.var a;
        2.var a=undefined;
        3.console.log(a);
    null:空引用数据类型
    返回值是object
        var a=null;
    
    undefined派生自null：
        undefined==null//true
    number
        1.进制数：10/10.3/0xa/010
        2.NaN: no a number (值不是number 类型是number)
            isNaN(a)
        3.infinity:无穷大
            isFinite(a):
    boolean
        true/false 
    string
        1.单引号双引号括起来的变量
        2.json:[{
            "name":'lisi'
            "age":20
        },{
            "name":'lisi'
            "age":30
        }]
        对象超过一个就用数组包含起来
        3.`` 字符串拼接

    一种引用类型
    object——function、array、date、math

    var a={}
    var stu=new Object();

    1.constructor:构造者
    2.toSting() 转化为字符串
        [object Object]默认情况下object toString返回该值

        function:Function(){
            toSting:function(){
                                当返回时不是[object Object]一定是该子类重写toString
            }
        }
    3.valueOf()：输出当前实例的值
        object：{}
            function：
            重写valueOf()

2.值传递
        基本数据类型：
            传递的是属性值
        引用数据类型
            栈区中存的是地址，所以传递的是地址
        
3.操作符
        算数操作符
            + += /- -= /* *= / / /= / % %=
            a+=b a=a+b 
            1.a,b均为数值
            2.a,b有一个不是number，并且不是string和object类型，转化成number
            3.如果a,b中有一个string，将另一个数值转换为string进行拼接
            4.如果其中一个为object，另一个不是string，默认调用toString方法进行拼接
                重写了valueOf则调用valueOf

        比较操作符
             > / < / <= / / =赋值操作符（从右向左赋值） / >= / == / ===

            1.都是number 直接比较
            2.一个为number 一个为其他 转number比较
            3.两个都是string 比较ASCII码
            4.引用类型比较 比较地址
            5.null=undefined
            ===
                先进行数据类型的比较，如果数据类型同，再比较值
                不进行数据转化 只进行比较
        
        逻辑操作符
            逻辑与&&——同真则真 有假则假
                1.如果第一个操作数NaN//false/null/undefined/0 返回第一个操作数
                2.如果操作数第一个为其他 返回第二个操作数
            逻辑或||——有真则真 同假才假
                1.如果第一个操作数NaN//false/null/undefined/0 返回第二个操作数
                2.如果操作数第一个为其他 返回第一个操作数
            逻辑非！——取反
                先将当前变量转为Boolean，然后取反
                ！"hello" 转化为Boolean 取反
                !!"hello" 对于任何变量连用两次逻辑非！！相当于将变量转换为Boolean

        三目运算符
            if(today==1){
                console.log("hello")
            }
            else{
                console.log("world")
            }

            表达式 ？value1：value2
            today==1?console.log("hello"):console.log("world");

        一元操作符：
            +：
                +a: 1.如果是number类型——>number 整数
                    2.不是number类型——>转换为number类型
            -：
                减号同加号 但取负值
                -a：-a
                -null：-0
            ++： 
                a++ = a=a+1 
                    var a=10;
                    console.log(a);
                    a=a+1; 
                a++；先操作变量，然后进行自增操作
                ++a：进行自增操作，然后操作变量
                var a=10;
                a=a+1;
                console.log(a);
            --：
                a-- = a=a-1 

        位运算：
            使用二进制进行计算 效率更高
            原码 反码 补码
            js中：位运算32位

----------------------------------------------- 

3.数据类型转换
null和undefined不需要进行转换

number
        *——>number 
        Number()转换函数
        parseInt（）：转换为整数
        parseFloat（）：转换为浮点数
        +a:Number()自动调用函数



----转换的值是null/undefined/boolean----

number()
    boolean:true——>1 false——>0
    null——>0 undefined——>NaN
parseFloat()
    均为NaN
parseInt()
    均为NaN

----转换的是number----

number()
    如果是数值——原样输出
parseFloat()
    如果是整数——原样输出
    如果是小数——保留小数点输出
parseInt()
    如果是整数——原样输出
    如果是小数——省略小数点输出


----如果是string转换----
1.如果仅包含数值，都转为对应数值输出
2.如果包含数值带小数点Number()和parseFloat()原样输出
  parseInt():转换为整数输出
3.
number()
    
parseFloat()
    
parseInt()





boolean
    *——>Boolean

string
        *——>string 
        string() 转换函数
            null
            undefined
            number
            boolean
            直接在变量值外添加引号
        toSting(num);转换进制
            null和undefined没有toString方法
        a+''

4.流程控制语句
    1.分支语句
        if（表达式/变量值——>Boolean）{
            true
        }
        else{
            false
        }

        if（Boolean）{
            true
        }
        else if（boole）{
            true
        }
        else{
            false
        }

    2.switch（表达式/变量）{
        case1 value1：console.log();
        case1 value2：console.log();
        case1 value3：console.log();
        case1 value4：console.log();
    
            default:console.log();
    }
    break：跳出循环体
    continue：跳出本次循环，继续下一次循环
    label：name()

    2.循环语句
        三要素: 初始条件
                迭代条件
                结束条件

        前置条件循环语句
        for(初始条件;结束条件;迭代条件){
            循环体
        }

        死循环：for(;;){}

        前置条件循环语句
        开始条件；
        while（结束条件）{
            循环体
            迭代条件
        }

        var a=1;
        while(a<=5){
            console.log(a);
            a++
        }

        死循环：while(true){}

        后置条件循环语句
        开始条件
        do{
            循环体
            迭代条件

        }while(结束条件)

        for in 循环：增强for循环：主要遍历对象


        for(var key(属性名) in stu(遍历对象)){
            console.log(stu.[kay])

        }
        var stu={
            name:"lisi",
            age:10,
            gender:"man"
        }
        for(var key in stu){
            console.log(key)
            console.log(stu[key])
        }

        with(作用域){
            console.log(name)；省略了stu.
            console.log(age)；
        }

-----------------------------------------------

5.对象
    object
    是一组属性和方法的集合
    
    1.创建object的实例对象
        1.对象字面量 var o={
            key：value1，
            key2：value2
        }
        2.构造函数
            var o=new Object();
            o.name="";
            o.age=;
    
    2.访问对象属性
        1.点操作符
            console.log(o.name);
        2.[]中括号
            ["字符串类型"]
            console.log(o["name"])
            对于变量的访问或者比较复杂的标识符名称访问比较容易

    3.删除对象属性
        delete o.name
